package com.demo.wx;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import jodd.util.StringUtil;
import util.GetExcelInfo;
import me.chanjar.weixin.common.bean.menu.WxMenu;
import me.chanjar.weixin.common.bean.menu.WxMenuButton;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
import me.chanjar.weixin.mp.api.WxMpMessageRouter;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTextMessage;

import com.demo.common.model.Blog;
import com.demo.common.model.WeisikejiMCC;
import com.jfinal.core.Controller;

public class wskjController  extends Controller{

	protected static WxMpInMemoryConfigStorage config;
	protected static WxMpService wxMpService;
	protected WxMpMessageRouter wxMpMessageRouter;
	static String token="weisikeji123";
	
	static{
		config = new WxMpInMemoryConfigStorage();
		 config.setToken(token);    // 设置微信公众号的token
		 config.setAppId("wx7b59340d20d8ef77");    // 设置微信公众号的appid
		 config.setSecret("76dae3d3c89db95adec9ad83b88ca484");  // 设置微信公众号的app corpSecret
	     wxMpService = new WxMpServiceImpl();
		 wxMpService.setWxMpConfigStorage(config);
	}
	
	
	/**
	 * 微信服务器验证
	 * @return
	 */
	public void weisikeji(){
		String method = getRequest().getMethod();
		if("GET".equals(method)){
			System.out.println("getqingqiu");
			// 微信加密签名  
	        String signature = getRequest().getParameter("signature");  
	        // 时间戳  
	        String timestamp = getRequest().getParameter("timestamp");  
	        // 随机数  
	        String nonce = getRequest().getParameter("nonce");  
	        // 随机字符串  
	        String echostr = getRequest().getParameter("echostr");  
	        //校验参数
	       if(wxMpService.checkSignature(timestamp, nonce, signature)){
	    	 renderText(echostr);
	        }else{
	          renderText("");
	        }
		}else if("POST".equals(method)){
			System.out.println("postqingqiu");
			WxMpXmlMessage message;
			try {
				message = WxMpXmlMessage.fromXml(getRequest().getInputStream());
			
				System.out.println(message);
				StringBuffer str = null;
				System.out.println("------------message.getMsgType()=="+message.getMsgType());
			    if(message.getMsgType()!=null  && "text".equals(message.getMsgType())){
			         if(message.getContent()!=null && !"".equals(message.getContent())){
			            String content=	 message.getContent();
			            WeisikejiMCC weisikejiMCC = getInfo(content);
			            if(null == weisikejiMCC){
			            	str = new StringBuffer();
			            	Blog blog = getBlogContent(content);
			            	if(blog!=null){
			            		str.append(blog.getContent());
			            	}else {
			            		str.append("查询失败,如需要查询MCC编码请输入4位MCC码即可！如需帮助,请输入客服！");
							}
			            }else {
			            	if(content.contains("客服")){
			            		str = new StringBuffer();
			            		str.append("【客服电话】\n"+weisikejiMCC.getAreaCode()+"\n");
			            	}else if (content.contains("售后")) {
			            		str = new StringBuffer();
			            		str.append("【售后电话】\n"+weisikejiMCC.getAreaCode()+"\n");
							}else {
			            		str = new StringBuffer();
				            	str.append("【商户类别】\n"+weisikejiMCC.getType()+"\n");
				            	if(null != weisikejiMCC.getRate() && !"".equals(weisikejiMCC.getRate())){
				            		str.append("【商户费率】\n"+weisikejiMCC.getRate()+"\n");
				            	}
				            	if(null!=weisikejiMCC.getIndustry()&&!"".equals(weisikejiMCC.getIndustry())){
				            		str.append("【所属行业】\n"+weisikejiMCC.getIndustry()+"\n");
				            	}
				            	if(null!=weisikejiMCC.getNoIntegral()&&!"".equals(weisikejiMCC.getNoIntegral())){
				            		str.append("【无积分银行】\n"+weisikejiMCC.getNoIntegral()+"\n");
				            	}
				            	if(null!=weisikejiMCC.getInformation()&&!"".equals(weisikejiMCC.getInformation())){
				            		str.append("【详细信息】\n"+weisikejiMCC.getInformation()+"\n");
				            	}
							}
						}
			         }
				}
			    if(message.getEvent()!=null &&"subscribe".equals(message.getEvent())){//关注事件
			    	str = new StringBuffer();
			    	str.append("欢迎关注本公众号！查询MCC请输入4位MCC编码！如需帮助,请输入客服！");
			    }
			    if(message.getEvent()!=null &&"CLICK".equals(message.getEvent())){//关注事件
//			    	if(message.getEventKey()!=null && "key1".equals(message.getEventKey())){
//			    		str = new StringBuffer();
//			    		str.append("此功能发布信用卡知识,敬请关注");
//			    	}
//			    	if(message.getEventKey()!=null && "key2".equals(message.getEventKey())){
//			    		str = new StringBuffer();
//			    		str.append("此功能发布互联网金融知识,敬请关注");
//			    	}
			    	if(message.getEventKey()!=null && "key4".equals(message.getEventKey())){//加入组织
			    		str = new StringBuffer();
			    		str.append("官方QQ群：463476710。名额有限预进从速。\n");
			    		str.append("微信群：目前开放。\n");
			    		str.append("-----进群请添加以下微信邀请-----\n");
			    		str.append("工作人员微信号：17755112125\n");
			    		str.append("工作人员微信号：18155179271");
			    	}
			    	if(message.getEventKey()!=null && "key5".equals(message.getEventKey())){//软件下载
			    		str = new StringBuffer();
			    		str.append("<a href='https://c.chinapnr.com/supay/index/download?org_id=310004&invite_code=W7MXQC2X'>闪电宝软件下载</a>\n");
			    		str.append("<a href='https://qkapp.chanpay.com:17181/'>钱客通软件下载</a>\n");
			    		str.append("<a href='http://youhui.95516.com/hybrid_v3/html/help/download.html'>银联钱包软件下载</a>\n");
			    	}
			    	if(message.getEventKey()!=null && "key6".equals(message.getEventKey())){//联系我们
			    		str = new StringBuffer();
			    		str.append("公司固话：0551-68995542\n");
			    		str.append("招商售后：17755112125\n");
			    		str.append("招商售后：18155179271\n");
			    		str.append("公司地址：安徽省合肥市包河区大宁缤购商业广场");
			    	}
//			    	 <option value="信用卡专栏">信用卡专栏</option>
//					  <option value="申请信用卡">申请信用卡</option>
//					  <option value="卡片照妖镜">卡片照妖镜</option>
//					  <option value="网贷">网贷</option>
			    	if(message.getEventKey()!=null && "key7".equals(message.getEventKey())){//信用卡专栏
			    		List<Blog> list = getBlogInfo("信用卡专栏");
			    		str = new StringBuffer();
			    		if(list!=null&&list.size()>0){
			    			str.append("回复如下标题查看内容:\n");
				    		for(Blog blog : list){
				    			str.append(blog.getTitle()+"\n");
				    		}
			    		}else {
			    			str.append("主要以提额，羊毛为主，敬请期待");
						}
			    	}
			    	if(message.getEventKey()!=null && "key8".equals(message.getEventKey())){//申请信用卡
			    		str = new StringBuffer();
			    		List<Blog> list = getBlogInfo("申请信用卡");
			    		str = new StringBuffer();
			    		if(list!=null&&list.size()>0){
			    			str.append("回复如下标题查看内容:\n");
				    		for(Blog blog : list){
				    			str.append(blog.getTitle()+"\n");
				    		}
			    		}else {
			    			str.append("信用卡申请，敬请期待");
			    		}
			    	}
			    	if(message.getEventKey()!=null && "key9".equals(message.getEventKey())){//卡片照妖镜
			    		str = new StringBuffer();
			    		List<Blog> list = getBlogInfo("卡片照妖镜");
			    		str = new StringBuffer();
			    		if(list!=null&&list.size()>0){
			    			str.append("回复如下标题查看内容:\n");
				    		for(Blog blog : list){
				    			str.append(blog.getTitle()+"\n");
				    		}
			    		}else {
			    			str.append("解释中介以及广告上的提额之类的口子。敬请期待");
			    		}
			    	}
			    	if(message.getEventKey()!=null && "key10".equals(message.getEventKey())){//网贷
			    		str = new StringBuffer();
			    		List<Blog> list = getBlogInfo("网贷");
			    		str = new StringBuffer();
			    		if(list!=null&&list.size()>0){
			    			str.append("回复如下标题查看内容:\n");
				    		for(Blog blog : list){
				    			str.append(blog.getTitle()+"\n");
				    		}
			    		}else {
			    			str.append("网络贷款的各种渠道，窗口，敬请期待");
			    		}
			    	}
			    }
				WxMpXmlOutTextMessage text=WxMpXmlOutTextMessage.TEXT().toUser(message.getFromUser()).fromUser(message.getToUser()).content(str.toString()).build();	
			    String xml=text.toXml();
				renderText(xml);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public WeisikejiMCC getInfo(String mcc) {
		return WeisikejiMCC.dao.findFirst("select * from weisikejiMCC where mcc='"+mcc+"'");
	}
	
	public List<Blog> getBlogInfo(String menuKey) {
		String sql = "select * from blog where menuKey = ? ";
		return Blog.dao.find(sql,menuKey);
	}
	
	public Blog getBlogContent(String title) {
		String sql = "select * from blog where title = ? ";
		return Blog.dao.findFirst(sql,title);
	}
	
	
//	 `id` int(5) NOT NULL,
//	  `mcc` varchar(50) DEFAULT NULL COMMENT 'MCC编码',
//	  `areaCode` varchar(500) DEFAULT NULL COMMENT '地区编码',
//	  `type` varchar(500) DEFAULT NULL COMMENT '商户类别',
//	  `rate` varchar(500) DEFAULT NULL COMMENT '商户费率',
//	  `information` varchar(500) DEFAULT NULL COMMENT '商户详细信息',
//	  `industry` varchar(500) DEFAULT NULL COMMENT '所属行业',
//	  `noIntegral` varchar(500) DEFAULT NULL COMMENT '无积分银行',
//	  `integral` varchar(500) DEFAULT NULL COMMENT '有积分银行',
	/**
	 * 导入excel
	 */
	public void excelInfo() {
		GetExcelInfo obj = new GetExcelInfo();  
        File file = new File("I:/MCC.xls");  
        Map<Integer,String > map = null;
        List<Map<Integer,String >> list = obj.readExcel(file);
        WeisikejiMCC mcc = null;
        for(int i=0 ;i<list.size();i++){
        	map = list.get(i);
        	System.err.println(map.get(1)+"--"+map.get(2)+"--"+map.get(3)+"--"+map.get(4));
        	mcc = new WeisikejiMCC();
        	if(map.get(0)!=null){
        		mcc.setMcc(map.get(0));
        	}
        	if(map.get(1)!=null){
        		mcc.setAreaCode(map.get(1));
        	}
        	if(map.get(2)!=null){
        		mcc.setType(map.get(2));
        	}
        	if(map.get(3)!=null){
        		mcc.setRate(map.get(3));
        	}
        	if(map.get(4)!=null){
        		mcc.setInformation(map.get(4));
        	}
        	if(map.get(5)!=null){
        		mcc.setIndustry(map.get(5));
        	}
        	if(map.get(6)!=null){
        		mcc.setNoIntegral(map.get(6));
        	}
        	if(map.get(7)!=null){
        		mcc.setIntegral(map.get(7));
        	}
        	mcc.save();
        }
	}
	
	
	 /**
	  *  微信测试公众号添加按钮按钮
	  */
	 public static void main(String[] args) {
		//创建菜单
	        
	        //生产菜单
	        WxMenuButton button1=new WxMenuButton();
	        button1.setName("信用卡");
	        button1.setType("click");
	        button1.setKey("key1"); 
	        WxMenuButton button2=new WxMenuButton();
	        button2.setName("金融站");
	        button2.setType("click");
	        button2.setKey("key2"); 
	        WxMenuButton button3=new WxMenuButton();
	        button3.setName("联系我们");
	        button3.setType("click");
	        button3.setKey("key3"); 
	        
	        //二级菜单key3：联系我们
	        WxMenuButton button4=new WxMenuButton();
	        button4.setName("加入组织");
	        button4.setType("click");
	        button4.setKey("key4"); 
	        
	        WxMenuButton button5=new WxMenuButton();
	        button5.setName("软件下载");
	        button5.setType("click");
	        button5.setKey("key5"); 
	        
	        WxMenuButton button6=new WxMenuButton();
	        button6.setName("联系我们");
	        button6.setType("click");
	        button6.setKey("key6"); 	
	        WxMenuButton button20=new WxMenuButton();
	        button20.setName("后台管理");
	        button20.setType("view");
	        button20.setKey("key20");
	        button20.setUrl("http://59.110.138.199/");
	        List<WxMenuButton> buttons1=new ArrayList<WxMenuButton>();
	        buttons1.add(button4);
	        buttons1.add(button5);
	        buttons1.add(button6);
	        buttons1.add(button20);
	        button3.setSubButtons(buttons1);
	        
	      //二级菜单key2：金融站
	        WxMenuButton button10=new WxMenuButton();
	        button10.setName("网贷");
	        button10.setType("click");
	        button10.setKey("key10"); 	        
	        List<WxMenuButton> buttons3=new ArrayList<WxMenuButton>();
	        buttons3.add(button10);
	        button2.setSubButtons(buttons3);
	      //二级菜单key1：信用卡
	        WxMenuButton button7=new WxMenuButton();
	        button7.setName("信用卡专栏");
	        button7.setType("click");
	        button7.setKey("key7"); 
	        
	        WxMenuButton button8=new WxMenuButton();
	        button8.setName("申请信用卡");
	        button8.setType("click");
	        button8.setKey("key8"); 
	        
	        WxMenuButton button9=new WxMenuButton();
	        button9.setName("卡片照妖镜");
	        button9.setType("click");
	        button9.setKey("key9"); 	        
	        List<WxMenuButton> buttons2=new ArrayList<WxMenuButton>();
	        buttons2.add(button7);
	        buttons2.add(button8);
	        buttons2.add(button9);
	        button1.setSubButtons(buttons2);
	        
	        
	        List<WxMenuButton> buttons=new ArrayList<WxMenuButton>();
	        buttons.add(button1);
	        buttons.add(button2);
	        buttons.add(button3);
	        
	        WxMenu menu=new WxMenu();
	        menu.setButtons(buttons);
	        
	        //发送请求 创建菜单（生产和测试的ID和秘钥不一样）
	        WxMpService service=new WxMpServiceImpl(); 
	        WxMpInMemoryConfigStorage wxConfigProvider=new WxMpInMemoryConfigStorage();
	        wxConfigProvider.setAppId("wx7b59340d20d8ef77");
	        wxConfigProvider.setSecret("76dae3d3c89db95adec9ad83b88ca484");
	        service.setWxMpConfigStorage(wxConfigProvider);
	        
	        try {
	            service.getMenuService().menuCreate(menu);
	        } catch (WxErrorException e) {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
	        }
	    }
}
